package cn.itcast.web.controller.cargo;


import cn.itcast.domain.cargo.Contract;
import cn.itcast.domain.cargo.ContractExample;
import cn.itcast.domain.system.User;
import cn.itcast.service.cargo.ContractService;
import cn.itcast.web.controller.BaseController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/cargo/contract")
public class ContractController extends BaseController {

    @Reference
    private ContractService contractService;

    /*
    url：/cargo/contract/list.do
    作用：查询购销合同列表
    参数： 无
    返回值： 购销合同列表页面(cargo/contract/contract-list.jsp)
  */
    @RequestMapping("/list")
    public String list(@RequestParam(defaultValue = "1") Integer pageNum,@RequestParam(defaultValue = "5") Integer pageSize){
        //1. 查询购销合同列表
        //创建购销合同的条件
        ContractExample contractExample = new ContractExample();
        //创建时间排序
        contractExample.setOrderByClause("create_time desc");
        ContractExample.Criteria criteria = contractExample.createCriteria();

        //2. 得到当前的登陆者,以及登陆者的等级
        User loginUser = getLoginUser();
        Integer degree = loginUser.getDegree();
        if(degree==4){
        //普通员工
            criteria.andCreateByEqualTo(loginUser.getId());
        }else if(degree==3){
        //部门经理
            criteria.andCreateDeptEqualTo(loginUser.getDeptId());
        }else if(degree==2){
        //大区经理
            PageInfo<Contract> pageInfo = contractService.findPageByDeptId(loginUser.getDeptId(),pageNum,pageSize);
            //2. 存储request域中
            request.setAttribute("pageInfo",pageInfo);
            //3. 回到页面
            return "cargo/contract/contract-list";
        }else if(degree==1){
        //企业管理员
            criteria.andCompanyIdEqualTo(loginUser.getCompanyId());
        }


        PageInfo<Contract> pageInfo = contractService.findByPage(contractExample,pageNum,pageSize);

        //2. 存储request域中
        request.setAttribute("pageInfo",pageInfo);
        //3. 回到页面
        return "cargo/contract/contract-list";

    }


    /*
      url：/cargo/contract/toAdd.do
      作用：进入购销合同添加页面
      参数：无
      返回值： cargo/contract/contract-add.jsp
   */
    @RequestMapping("/toAdd")
    public String toAdd(){
        //返回到添加购销合同的页面
        return "cargo/contract/contract-add";
    }


    /*
     url：/cargo/contract/edit.do
     作用：保存添加与保存修改
     参数：购销合同对象
     返回值： 购销合同列表
  */
    @RequestMapping("/edit")
    public String edit(Contract contract){
        //补充数据，因为这些数据是来自于登陆者
        String companyId = getLoginUserCompanyId();
        String companyName= getLoginUserCompanyName();
        contract.setCompanyId(companyId);
        contract.setCompanyName(companyName);
        //购销合同的创建人
        contract.setCreateBy(getLoginUser().getId());
        //购销合同创建人所属的部门
        contract.setCreateDept(getLoginUser().getDeptId());

        //1.判断contract是否携带id过来，如果没有携带则是添加
        if(StringUtils.isEmpty(contract.getId())){
            contractService.save(contract);
        }else {
            //2. 如果携带id过来则是修改
            contractService.update(contract);
        }
        return "redirect:/cargo/contract/list.do";
    }


    /*
        url：/cargo/contract/toUpdate.do?id=100101
        作用：进入购销合同修改页面
        参数：购销合同id
        返回值：cargo/contract/contract-update.jsp
     */
    @RequestMapping("/toUpdate")
    public String toUpdate(String id){
        //1. 根据id查询购销合同
        Contract contract = contractService.findById(id);

        //2. 把购销合同存储到请求域中
        request.setAttribute("contract",contract);

        //3. 返回更新页面
        return "cargo/contract/contract-update";

    }

    /*
     url：cargo/contract/delete.do
     作用：删除购销合同
     参数：购销合同id
     返回值：购销列表
  */
    @RequestMapping("/delete")
    public String delete(String id){
         contractService.delete(id);
        return "redirect:/cargo/contract/list.do";
    }


    /*
       url：/cargo/contract/toView.do?id=dd63eb3c-6d4e-4a85-9c37-fcfda1998c1d
       作用：查看购销合同详情
       参数：购销合同id
       返回值：contract-view
    */
    @RequestMapping("/toView")
    public String toView(String id){
        //1. 根据id查找到购销合同
        Contract contract = contractService.findById(id);
        //2. 存储到域中
        request.setAttribute("contract",contract);
        //3. 返回到页面
        return "cargo/contract/contract-view";
    }


    /*
      url：/cargo/contract/submit.do?id=dd63eb3c-6d4e-4a85-9c37-fcfda1998c1d
      作用：提交购销合同z
      参数：购销合同id
      返回值：购销合同列表
   */
    @RequestMapping("/submit")
    public String submit(String id){
        //1.根据id查找购销合同
        Contract contract = contractService.findById(id);
        //2. 修改购销合同的状态
        contract.setState(1);

        //3. 调用service更新购销合同的状态
        contractService.update(contract);
        //4. 回到购销合同列表
        return "redirect:/cargo/contract/list.do";
    }


    /*
     url：/cargo/contract/cancel.do?id=dd63eb3c-6d4e-4a85-9c37-fcfda1998c1d
     作用：取消购销合同z
     参数：购销合同id
     返回值：购销合同列表
  */
    @RequestMapping("/cancel")
    public String cancel(String id){
        //1.根据id查找购销合同
        Contract contract = contractService.findById(id);
        //2. 修改购销合同的状态
        contract.setState(0);

        //3. 调用service更新购销合同的状态
        contractService.update(contract);
        //4. 回到购销合同列表
        return "redirect:/cargo/contract/list.do";
    }
}
